


--版本管理服务器上热更新列表
gd_versionlistdir = 'versionlist.dat';
--热更新包包名的前缀
gd_godsliekithead = 'godsliekit_';
--当前版本版本信息文件名
gd_versionfile = 'res/versioninfo.json'; 
gd_channel = c_getChannel(); --渠道,PP,91等
gd_testmode = '' 
--热更新目录名
gd_hotupdatedir = 'godsliekit' .. gd_channel;--热更新目录要加上gd_qudao  


local mainlua = 'src/main.lua';
local originpath = cc.FileUtils:getInstance():fullPathForFilename(mainlua);
local wrt = cc.FileUtils:getInstance():getWritablePath();




--设置搜索路径
function initSearchPath()
  --获取Lua源代码所在的系统绝对路径
  originpath = string.sub(originpath,1,#originpath - #mainlua);
  local wrt = cc.FileUtils:getInstance():getWritablePath();
  --代码货资源的搜索路径包括当前源码路径和热更新目录路径
  local rootpath={originpath,wrt .. gd_hotupdatedir .. '/'};
  --将搜索路径和热更新路径添加的代码或资源搜索路径中
  for i = 1,1 do
    local luapath = rootpath[i]; 
    cc.FileUtils:getInstance():addSearchPath(luapath,true);
    cc.FileUtils:getInstance():addSearchPath(luapath .. 'src',true);
    cc.FileUtils:getInstance():addSearchPath(luapath .. 'res',true);
  end 
end


-- cclog
cclog = function(...)
    local date=os.date("%Y-%m-%d %H:%M:%S")
    print( "["..date.."]  ".. string.format(...));
end 






















--[[

function readData(name) 
  local data= c_readBData(name);
  if data and #data > 0 then 
    return data;
  end
  return nil;
end



function checkversionKit()  
  local rootpath={originpath,wrt .. gd_hotupdatedir .. '/'};
  --检查热更新目录是否有热更新包未处理
  --读取热更新目录下的版本列表   
  local path = wrt .. gd_hotupdatedir .. '/' .. gd_versionlistdir; 
  local data = readData(path);   
  if data and #data > 0 then 
	local json = require 'json'
    versionlist = json.decode(data);
    --根据版本列表信息查看热更新目录下是否有处理的更新包
    local storagepath = wrt .. gd_hotupdatedir .. '/';
    for i = 1,#versionlist do
	  local depverinfo=versionlist[i] 
      local zipname = gd_godsliekithead .. depverinfo.versionstr .. '_v' .. depverinfo.version .. '_b' .. depverinfo.build .. '.zip'; 
      local kitfile = io.open(storagepath .. zipname, 'rb'); 
      --如果更新包存在，就将其解压 
      if kitfile then
        kitfile:close();
        c_uncompressFile(storagepath,zipname);
      end
    end
    --解压完更新包后就删除
    c_removeFile(storagepath .. gd_versionlistdir);
  end
  --判断当前版本信息和热更新目录下的版本信息哪个更新(这样处理的原因是因为有可能用户手动安装了最新版本，却未清理热更新目录，造成程序执行源码出错
  path = rootpath[2] .. gd_versionfile; 
  data = readData(path);
  if data and #data > 0 then 
    local hotversion = json.decode(data); 
    local hotversionint =  hotversion.version;
    path = rootpath[1] .. gd_versionfile; 
    data = readData(path); 
    local version=json.decode(data);
    local versionint = version.version;
    --如果当前版本比本地残留的热更新目录下的版本还高，则移除热更新目录并退出(重启)游戏
    if versionint >= hotversionint then
      c_deleteUserDir(wrt .. gd_hotupdatedir);
      --再重新设置更新目录
      initSearchPath();
    end
  end
end



function isChannel()
	return gd_channel ~= '';
end



--todo 项目成员熟悉后该段代码删除 
--不要在这里修改该值，修改同目录下的debug_version.lua zjb 2015年7月3日
--DEBUG_VERSION = false

--新手引导开关,在debug模式下该值从配置文件读取 zjb 2015年5月30日
--该值在登陆动作的时候确定，在此之前都为false，不要修改这个值！！
NEWPLAY_GUIDE = true

TOTAL_LOG = false
 
if DEBUG_VERSION then
-- require('mobdebug').start()                                                                 a
end

cclog = function(...)
  print(string.format(...)) 
end


_G._scaleResolutionX = TuiManager:getInstance():getScaleResolutionX()
_G._scaleResolutionY = TuiManager:getInstance():getScaleResolutionY()
_G._scheduler = cc.Director:getInstance():getScheduler()

-- Arp 逻辑坐标系转换成物理坐标系
Arp = function(p)
  return cc.p(p.x*_G._scaleResolutionX,p.y*_G._scaleResolutionY)
end

-- Arp1 逻辑坐标系转换成物理坐标系
Arp1 = function(p)
  return cc.p(p.x*1,p.y*1)
end

-- unArp 物理坐标系转换成逻辑坐标系
unArp = function(p)
  return cc.p(p.x/_G._scaleResolutionX,p.y/_G._scaleResolutionY)
end


local win_size = cc.Director:getInstance():getWinSize()
-- cocos 坐标系的点转到 Tui
getTuiPoiFromCocos = function(ccp)
  ccp.x = ccp.x - win_size.width/2
  ccp.y = win_size.height - ccp.y - win_size.height/2
  return ccp
end

-- Tui 坐标系的点转到 cocos
getCocosPoiFromTui =  function(ccp)
  ccp.x = ccp.x + win_size.width/2
  ccp.y = win_size.height/2 - ccp.y
  return ccp
end

getWritePath = function()
  local path = cc.FileUtils:getInstance():getWritablePath()
  return path
end

REGISTER_SCENE_FUNC = function(sceneName,constructFunc)
  CSceneManager:getInstance():registerSceneClassScriptFunc(sceneName,constructFunc)
end

LoadScene = function(sceneName)
  -- TuiManager:getInstance():setAdaptResolution(true,960,640)
  return CSceneManager:getInstance():loadScene(sceneName)
end
 

--]]
















-- for CCLuaEngine traceback 抛出错误信息
function __G__TRACKBACK__(msg) 
	   -- userop.sendLog(msg)  -- 这个暂时连不到网络，直接打印
     userop.showError(msg)
end








CURRENT_SCENE = nil
 
local function main()
    -- 内存设置
    collectgarbage("collect")
    -- avoid memory leak
    collectgarbage("setpause",100)
    collectgarbage("setstepmul",5000) 

    
    -- 初始化更新包-策略
    c_createDownloadDir(gd_hotupdatedir);  
    initSearchPath()
    
    -- 引入必须文件
    require "cocos.init" 
    require 'support/userop'
    require "support/PublicFunction"
    require "support/SSArray"
    require "RootLayer/RootLayer"
    -- checkversionKit();--检查上一次的未解压完毕的更新包
    --检查渠道
    -- require 'channel';


    -- 启动主场景
    local scene=cc.Scene:create();
    cc.Director:getInstance():runWithScene(scene)
    CURRENT_SCENE = scene


    --[- 进入游戏根界面层.
    local rootLayer = RootLayer:create()
    scene:addChild( rootLayer )
    rootLayer:start()
    --]]



    ----
    -- channel.bindQdCheck();
    -- channel.checkQdGameUpdate();
end 




xpcall(main, __G__TRACKBACK__) 











